package com;

import java.sql.*;

public class JDBCQuery {
    final static String DRIVER = "com.mysql.cj.jdbc.Driver";
    // 数据库的实例名是 data65
    final static String URL = "jdbc:mysql://localhost:3306/xueshen?useUnicode=true&characterEncoding = utf8";
    final static String USERNAME = "root";
    final static String PASSWORD = "root";
    static Connection connection = null;
    static PreparedStatement pstmt = null;
    static ResultSet rs = null;

    // 提供两个参数，传入用户账号和密码，如果登录成功返回true，失败返回false
    public static boolean executeQuery(String userAccount, String userPassword) {
        try {
            // 第一步，加载驱动
            Class.forName(DRIVER);
            // 第二步，得到连接对象
            connection = DriverManager.getConnection(URL, USERNAME, PASSWORD);

            // 第三步，根据具体的sql语句和传入的参数进行查询，得到查询结果集
            // 如果用户输入的 username 和 password 在表中有对应的数据(count(1) > 0），
            // 则说明存在此用户
            String querySql = "SELECT COUNT(1) FROM myusers WHERE userAccount = ? AND userPassword = ?";
            pstmt = connection.prepareStatement(querySql);
            pstmt.setString(1, userAccount);
            pstmt.setString(2, userPassword);
            rs = pstmt.executeQuery();

            // 第四步，遍历查询结果集，判断查询结果
            if (rs.next()) {
                // 获取 SQL 语句中 count(1)的值
                int count = rs.getInt(1);
                if (count > 0) {
                    System.out.println("登录成功");
                    return true;
                } else {
                    System.out.println("登录失败");
                    return false;
                }
            }

        // 第五步，异常处理和关闭，注意顺序
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // 注意 rs、stmt、connection 三个对象的关闭顺序
                if (rs != null)
                    rs.close();
                if (pstmt != null)
                    pstmt.close();
                if (connection != null)
                    connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
	
        // 中途出现意外也返回false
        return false;
    }
}